/**
 * 
 */
package sqs.ejb.sessionbean;

import java.util.List;

import javax.ejb.Stateless;

import sqs.dataaccess.DaoFactory;
import sqs.dataaccess.QuestionnaireDao;
import sqs.dataaccess.SubmittedQuestionnaireDao;
import sqs.exception.DataAccessException;
import sqs.exception.QuestionnaireNotFoundException;
import sqs.model.Questionnaire;
import sqs.model.SubmittedQuestionnaire;
import sqs.model.User;

/**
 * @author kjleng
 * 
 */
@Stateless(name = "QuestionnaireEJB", mappedName = "ejb/QuestionnaireJNDI")
public class QuestionnaireBean implements QuestionnaireMgr {
	private QuestionnaireDao questionnaireDao = DaoFactory.getInstance(1).getQuestionnaireDao();
	private SubmittedQuestionnaireDao submittedQuestionnaireDao  = DaoFactory.getInstance(1).getSubmittedQuestionnaireDao();

	public void initialize() {
		System.out.println("!!!!!initialize........ ");
    	questionnaireDao = DaoFactory.getInstance(DaoFactory.HIBERNATE)
				.getQuestionnaireDao();
    	System.out.println("!!!!!iquestionnaireDao in initialize= " +questionnaireDao);
    	
    	submittedQuestionnaireDao = DaoFactory.getInstance(DaoFactory.HIBERNATE)
				.getSubmittedQuestionnaireDao();
	}

	public void createQuestionnaire(Questionnaire questionnaire) {
		try {
			questionnaireDao.createQuestionnaire(questionnaire);
		} catch (DataAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public Questionnaire getQuestionnaireByQuestionnaireId(int questionnaireId)
			throws QuestionnaireNotFoundException {
		Questionnaire q = null;
		try {
			q = questionnaireDao
					.getQuestionnaireByQuestionnaireId(questionnaireId);
	    	if (q == null) {
				throw new QuestionnaireNotFoundException();
			}
		} catch (DataAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return q;
	}

	public List<Questionnaire> getQuestionnairesByOwner(User user) {
		List<Questionnaire> questionnaires = null;
		try {
			questionnaires = questionnaireDao.getQuestionnairesByOwner(user);
		} catch (DataAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return questionnaires;
	}

	public void submitQuestionnaire(
			SubmittedQuestionnaire submittedQuestionnaire)
			throws QuestionnaireNotFoundException {
		try {
			int qId = submittedQuestionnaire.getQuestionnaire()
					.getQuestionnaireId();
			Questionnaire q = questionnaireDao
					.getQuestionnaireByQuestionnaireId(qId);
			if (q == null) {
				throw new QuestionnaireNotFoundException();
			}else{
				submittedQuestionnaireDao.submitQuestionnaire(submittedQuestionnaire);
			}
		} catch (DataAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void updateQuestionnaire(Questionnaire questionnaire)
			throws QuestionnaireNotFoundException {
		try {
			int qId = questionnaire.getQuestionnaireId();
			Questionnaire q = questionnaireDao
					.getQuestionnaireByQuestionnaireId(qId);
			if (q == null) {
				throw new QuestionnaireNotFoundException();
			}else{
				questionnaireDao.updateQuestionnaire(questionnaire);
			}
		} catch (DataAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public List<Questionnaire> getAllQuestionnaires(){
		List<Questionnaire> questionnaires = null;
		try {
			questionnaires = questionnaireDao.getAllQuestionnaires();
		} catch (DataAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return questionnaires;
	}
}
